from PIL import Image
import numpy as np

def normalize_depth_image(image_path, output_path):
    """
    读取一个16位深度的深度图，将其深度值归一化到0-65535范围内，并保存为新的图像。
    
    参数:
        image_path (str): 输入深度图的路径
        output_path (str): 输出归一化后深度图的路径
    """
    # 读取图像
    try:
        img = Image.open(image_path)
    except Exception as e:
        print(f"无法打开图像文件: {e}")
        return
    
    # 将图像转换为NumPy数组
    depth_data = np.array(img)
    
    # 确保深度图是16位的
    if depth_data.dtype != np.uint16:
        print("输入图像不是16位深度，请确保输入图像是16位的深度图")
        return
    
    # 找到深度图中的最小值和最大值
    min_depth = np.min(depth_data)
    max_depth = np.max(depth_data)
    
    print(f"原始深度范围: [{min_depth}, {max_depth}]")
    
    # 归一化到0-65535范围
    normalized_depth = ((depth_data - min_depth) / (max_depth - min_depth)) * 65535
    
    # 转换为16位整数
    normalized_depth = normalized_depth.astype(np.uint16)
    
    # 将归一化后的深度图保存为新的图像
    normalized_img = Image.fromarray(normalized_depth)
    normalized_img.save(output_path)
    
    print(f"归一化后的深度图已保存到: {output_path}")

if __name__ == "__main__":
    input_image_path = "frame_0001.png"  # 输入深度图的路径
    output_image_path = "normalized_depth_map.png"  # 输出归一化后深度图的路径
    
    normalize_depth_image(input_image_path, output_image_path)